#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  cout<<"代码开始"<<endl;
  execl("/usr/bin/ls","ls","-a","-l", "--color=auto",NULL);
  return 0;
}
//typedef void (*handler_t)();  // 函数指针类型 
//vector<handler_t> handlers;   // 函数指针数组
//void func_one()
//{
//  cout<<"这是任务1"<<endl;
//}
//void func_two()
//{
//  cout<<"这是任务2"<<endl;
//}
//// 设置方法回调
//void Load()
//{
//  handlers.push_back(func_one);
//  handlers.push_back(func_two);
//}
//int main()
//{
//  pid_t id = fork();
//  if(id == 0)
//  {
//    int cnt=5;
//    while(cnt--)
//    {
//      printf("子进程运行中, cnt:%d, id:%d\n", cnt, getpid());
//      sleep(1);
//    }
//    exit(66);
//  }
//  else 
//  {
//    int quit = 0; 
//    while(!quit)
//    {
//      int status = 0;
//      pid_t res = waitpid(-1, &status, WNOHANG);  // 非阻塞式的等待
//      if(res >0)
//      {
//        // 等待成功&&子进程退出
//        printf("等待子进程退出成功，退出码是:%d\n", WEXITSTATUS(status));
//        quit = 1;
//      }
//      else if(res == 0)
//      {
//        // 等待成功&&子进程退出
//        printf("子进程还没有退出，这时候父进程可以做一些别的事情\n");
//        if(handlers.empty())  Load();
//        for(auto&e : handlers)
//        {
//          // 执行其他任务
//          e();
//        }
//        sleep(1);
//      }
//      else 
//      {
//        printf("wait等待失败！\n");
//        quit=1;
//      }
//    }
//
//
//
//
//   //int status = 0;
//   //// 第一个参数,pid
//   //// pid>0，等待指定进程
//   //// pid=-1,等待任意进程，与wait等效
//   //pid_t res = waitpid(id, &status, 0);
//   //if(res != 0)
//   //{
//   //  // 可以不这么写
//   //  // printf("等待子进程成功，exit_code:%d, sig_code:%d\n", (status>>8)&0xff, status&0x7f);
//   //  if(WIFEXITED(status) == true)
//   //  {
//   //    // 子进程正常退出
//   //    printf("子进程正常退出，退出码是:%d\n", WEXITSTATUS(status));
//   //  }
//   //  else 
//   //  {
//   //    // 子进程异常退出
//   //    printf("子进程异常退出，退出码是:%d\n", WIFEXITED(status));
//   //  }
//   //}
//  }
//  return 0;
//}
//
